1. 배열
배열의 개념
배열은 같은 타입의 여러 변수를 하나의 묶음으로 다루는 것 이다, ( JAVA 기준 )
배열을 선언하고 생성하기
- 배열의 생성 예시
1.타입[] = 변수이름; 변수 이름 = new 타입[길이]; ex) int[] = arr; arr = new int[5]; 2.타입[] 변수이름 = new 타입[길이]; ex) int[] arr = new int[5];
- 배열의 초기화
1. 선언 후 인덱스별로 초기화 int[] arr1 = new int[5]; arr1[0] = 1; arr1[1] = 2; . . arr1[4] = 5; 2. 선언할 때 초기화 int[] arr1 = new int[] {값} int[] arr1 = {1,2,3,4,5} //new 타입[] 생략 3. 선언 후 초기화(선언 후 초기화는 new 타입[] 생략 불가) int[] arr; int[] arr = new int[] {1,2,3,4,5}
배열의 길이와 인덱스
- 배열의 길이
int[] arr = new int[5];
- int[길이] 이기 때문에 해당 arr이란 이름을 가진 배열은 길이가 5임을 예측 할 수 있다.
- 배열의 인덱스(번호), 인덱스에 값 넣기
//배열의 인덱스 int[0] = 1 index 값
- “배열의 첫 번째 칸에 1을 넣어줘” 와 같습니다.
- 배열의 인덱스는 0부터 세기 대문에 길이가 n인 배열에서 인덱스는 0~n-1입니다.
- 배열은 할당될 때 주소값이 부여되며 해당 크기 별로 주소값이 더해집니다.
- 배열 모두 출력하기
3.1) for문을 이용하여 모두 출력하기
int[] arr = {1,2,3,4,5}; for(int i=0; i<arr.length; i++){ System.out.println(arr[i]); }
3.2) Arrays.toString Method 사용하기
int[] arr = {1,2,3,4,5}; System.out.println(Arrays.toString(arr)); //[1,2,3,4,5]출력
😁 그냥 배열을 출력하면 안되나요?
- python 같은 언어는 print(배열) 를 하면 배열 자체를 출력한다
- 하지만 JAVA 같은 경우 배열 변수는 참조 변수기 때문에 형태@내부 주소로 출력 된다
- 하지만 예외적으로 char[] 배열의 경우에는 println을 사용하면 저렇게 출력해도 12345인 결과 값이 나온다.
import java.util.*; public class TestCode{ public static void main(String[] args){ char[] charr = {'a','b','c'}; int[] intarr = {1,2,3,4,5}; System.out.println("charr =" + charr); System.out.println("intarr = " + intarr); System.out.println(charr); System.out.print(charr); } } /* charr =[C@3d012ddd intarr = [I@626b2d4a abc abc */
- 배열의 복사
1) for문을 이용한 배열의 복사
- 길이가 5인 배열 생성(복사 대상)
int[] arr1 = new int[5];
배열의 복사는 많은 리소스를 사용하기 떄문에 처음부터 배열의 길이를 길게 주는 것이 좋다.
- 해당 배열을 복사하기
//arr1 길이의 두배인 배열을 생성한다. int[] arr2 = new int[arr1.length*2]; //arr1의 요소를 전부 복사한다 for(int i=0; i < arr1.length; i++){ arr2[i] = arr1[i] } //arr2참조 변수를 arr1로 변경 arr1 = arr2;
- 이렇게 되면 arr1의 배열은 사용 불가 상태가 되어 가비지 컬렉터에 의해 없어진다(참조변수가 사라졌기 때문)
- 추가적으로 반복문 안에 배열을 넣어서 사용할 때는 배열의 index값을 정확히 파악해서 써야만 한다.
- 컴파일 시에는 문제가 발생하지 않지만 실행할 때 에러가 생길 수 있기 때문이다.
2) System.arraycopy() 를 이용한 배열의 복사
System.arraycopy(변경대상 배열의 참조변수, 변경 대상index, 변경 후 참조변수, index, 길이); //예시 System.arraycopy(arr, 0, cp_arr, 0, arr.length);
2. String 배열
String 배열의 생성
String[] 변수이름 = new String[길이];
참조형 변수의 기본값은 null임으로 각 배열의 요소는 null로 초기화 된다.
String 배열의 초기화
한개씩 초기화 하기
변수이름[0] = "hello"; 변수이름[1] = "my"; . . .
선언시 바로 초기화하기
String[] 변수이름 = new String[]{"hello","world","!"}; //new String[] 생략 String[] 변수이름 = {"hello","world","!"};
기본형 배열이 아닌 배열은 실제 객체가 아닌 객체의 주소가 저장되어 있다.
- 변수이름[0] 에는 실제로 주소값이 들어있다는 이야기 이다.
- String 배열은 Char배열에 기능을 추가한 것이다.
String 클래스의 주요 method
함수 | 인자 | 반환형태 | 설명 |
charAt(index) | int index | char | index에 있는 문자를 빼낸다 |
length() | none | int | 배열의 길이를 출력한다 |
substring(start index, end index) | int, int | String | start index부터 end index까지의 문자열을 출력한다 |
equals(object ob) | Object | boolean | 비교 대상과 문자열이 같은지 확인한다 |
toCharArray() | none | char[] | 문자열 한개 단위로 잘라서 char배열로 반환한다 |
char배열과 String 클래스의 변환
//char 배열을 String으로 변환 char[] arr1 = {'h', 'i'}; String arr2 = new String(arr1) //"hi" //String을 char 배열로 변환 String s = "hi"; char[] arr3 = s.toCharArray(); //['h', 'i']
문자열(숫자)을 숫자로 바꾸기
String num = "1234"; int num1 = Integer.parseInt(num);
3. 다차원 배열(2차원만 다룸)
2차원 배열의 선언
//타입 [][] 변수이름 = 타입[행 길이][열 길이] int[][] arr1 = int[5][4] //타입 변수이름[][] = 타입[행길이][열 길이] int arr[][] = int[5][4] //타입[] 변수이름[] = 타입[]행길이][열 길이] int[] arr1[] = int[5][4]
2차원 배열의 초기화
int[][] arr1 = {{1,2}, {3,4}, {5,6}}:
결과물
ㅤ | arr[n][0] | arr[n][1] |
arr[0] | 1 | 2 |
arr[1] | 3 | 4 |
arr[2] | 5 | 6 |
2차원 배열에서의 모든 요소를 읽어오기
//case1 int[][] arr1 = {{1,2}, {3,4}, {5,6}} for(int i = 0; i < arr1.length; i++){ for(int j = 0; j< arr1[i].length; j++{ System.out.println(arr1[i][j]); } } //case2 간단한 for구문을 사용해서 읽어오 for(int[] i : arr1){ for(int j : i) { System.out.println(j); } }
가변 배열(길이가 각자 다른 배열 생성)
int[][] arr1 = new int[4][]; //행의 길이만 설정한다 arr1[0] = new int[4]; arr1[1] = new int[3]; arr1[2] = new int[2]; arr1[3] = new int[1];
결과
ㅤ | arr[n][0] | arr[n][1] | arr[n][2] | arr[n][3] |
arr1[0] | null | null | null | null |
arr1[1] | null | null | null | ㅤ |
arr1[2] | null | null | ㅤ | ㅤ |
arr1[3] | null | ㅤ | ㅤ | ㅤ |
4. 객체 배열
package teach; import java.util.*; class Test{} public class TestCode{ public static void main(String[] agrs) { Test[] tarr = new Test[5]; tarr[0] = new Test(); tarr[1] = new Test(); . . tarr[4] = new Test(); } }